MagnaMedia · AMIGA-Magazin · Lokalisierung von Applikationen (Folge 2)

Aktuelles Heft 11/97

Sprachgenie

Nachdem wir in der letzten Ausgabe des AMIGA- Magzins die Grundlagen zur Local Library gelegt haben, wollen wir diesen Monat noch tiefer in die Materie eindringen. Wir werden unsere Kenntnisse vertiefen und die Anpassung an die Sprache-Spezifikationen verfeinern. Die ganze Angelegenheit an Hand von Programm-Beispielen und Demos � das wieder in C++.

von Marcel Bennicke

D er Einsatz von Katalogen wurde in der letzten Ausgabe ausgiebig besprochen. An Hand des Listings �LocCatalogDemo.cpp� k�nnen Sie diese Schritte noch einmal mitverfolgen.

Eine lokalisierte String-Klasse

Eingangs ist bereits angeklungen, da� die Locale-Library mehr kann, als nur Sprachdateien verwalten. Wenn Sie sich den Inhalt der Locale-Struktur noch einmal vor Augen halten, f�llt auf, da� sie auch Informationen �ber Ausgabeformate von Datum, Zeit, Geldbetr�gen, Zahlen usw. speichert. Dementsprechend existieren auch Funktionen, die bespielsweise das Datum in jeder landesspezifischen Schreibweise ausgeben k�nnen. Nur leider sind einige dieser sehr n�tzlichen Funktionen in der Praxis eher umst�ndlich zu handhaben, was viele Programmierer bisher abschreckte, davon auch Gebrauch zu machen.

   Voll integriert: Hinter dem Projekteintrag loccatalog.cd verbirgt sich der Aufruf des Katalog-Compilers FlexCat aus StormC heraus � Kommandozeilen ade!

Deshalb finden Sie begleitend zu diesem Artikel eine String-Klasse in C++, welche alle Funktionen der Locale-Library kapselt. Zu ihren Features z�hlen beispielsweise: Wandlungen zwischen Gro�- und Kleinschreibung. Die Funktionen wirken sich auch auf deutsche (oder andere) Umlaute aus. Zeichenketten wie "2.303. 302,002" werden korrekt in Flie�kommawerte umgewandelt. Standardtexte wie Wochentage und Monatsnamen stehen sofort in jeder Sprache zur Verf�gung. Last but not least ist sie so implementiert, da� das Kopieren kompletter Speicherinhalte etwa bei einer Zuweisung m�glichst vermieden wird. Sie k�nnen diese Klasse in Ihren Programmen verwenden, als sei �string� ein in C++ eingebauter Typ. Zuweisungen, Vergleiche, Verkettung, Substrings, Ein- und Ausgabe durch Streams � an alles wurde gedacht. Das Beispielprogramm �StringDemo� demonstriert einige der Features dieser Klasse. Eine vollst�ndige Dokumentation ist als Amiga-Guide auf unserer CD verf�gbar.

Kataloge erzeugen mit StormC

Damit Sie sich nicht auch noch um die Bedienung des Katalog-Compilers k�mmern m�ssen, finden Sie auf unserer CD fertige Make-Skripte f�r StormC. Diese basieren auf dem Katalog-Compiler �FlexCat� von Jochen Wiedmann. Alles was Sie tun m�ssen, ist eine Katalogbeschreibung zu erzeugen, diese dem Projekt hinzuzuf�gen und mit dem Men�punkt �Kompilieren/ �bersetzungs-Skript ausw�hlen� das Skript �FlextCat_cd.srx� auszuw�hlen. Wenn Sie das Projekt nun im Compiler �bersetzen lassen, erzeugt das Skript eine (anfangs noch leere) .ct-Datei sowie einen C++ Quelltext mit zugeh�rigem Headerfile. Dort sind die im Text angesprochenen CtlgMessage-Objekte versteckt. Der Name dieser beiden Dateien leitet sich aus der Katalogbeschreibung ab, indem die Endung �_cat.h� bzw. �_cat.cpp� angeh�ngt wird. Da dieses neue Modul noch nicht �bersetzt wurde, erhalten Sie beim Linke-Vorgang zun�chst einige Fehlermeldungen.

LocCatalogDemo: Einfacher geht's nicht � LocCatalog-Klasse erm�glicht schnell lokalisierte Applikationen

W�hlen Sie nun als �bersetzungs-Skript f�r die neue .ct-Datei bitte �FlexCat_ct.srx� aus. Jetzt sollte sich das gesamte Projekt fehlerfrei �bersetzen und linken lassen � das Skript erzeugt automatisch einen Katalog, generiert gegebenenfalls eine Schublade �catalogs/<Sprache>� und schreibt den Katalog dort hinein. Ihr Programm kann somit problemlos darauf zugreifen. Damit w�ren wir auch schon am Ende unseres Streifzuges durch die Locale-Library angekommen. Sie finden alle Beispielprogramme zusammen mit einem Installerskript, Projekten f�r StormC, dem Katalog-Compiler FlexCat sowie einer kleinen Klassenbibliothek auf den WWW-Seiten des AMIGA-Magazins (http://www.magnamedia.de/amiga/) bzw. auf unserer CD . Viel Spa� beim Arbeiten mit der Local-Library.

lb

Katalogbeschreibungen und Katalog�bersetzungen


Katalogbeschreibungen m�ssen in einer f�r den Katalog-Compiler verst�ndlichen Sprache verfa�t sein. Commodore entwickelte seinerzeit �CatComp� � dessen Syntax kommt auch bei anderen als Freeware erh�ltlichen Compilern wie beispielsweise dem hier verwendeten �FlexCat� zum Einsatz.

Eine Katalogbeschreibung enth�lt Kommentare, Kommandozeilen, Beschreibungszeilen und Textzeilen. Leerzeilen gelten als Fehler � man schreibt stattdessen einfach einen leeren Kommentar. Jede Zeile, die mit einem Semikolon �;� beginnt, ist ein Kommentar. Mit einer Raute �#� beginnende Zeilen enthalten Kommandos:
#language <Sprache>
Bestimmt die Sprache der Katalogbeschreibung (klein schreiben!). Voreingestellt ist �english�.
#version <Nummer>
Definiert die Version der Kataloge, die sp�ter ge�ffnet werden sollen. Diese Information gelangt nicht in den Katalog selbst (dazu gibt es in der Katalog�bersetzung eine Versionsinformation), sondern kann als Argument f�r OpenCatalog dienen (wozu allerdings der Katalog-Compiler diese Nummer irgendwie im Quelltext zug�nglich machen mu�). Voreinstellung:
#version 0
#lengthbytes <n>
Durch dieses Kommando werden vor den eigentlichen String Informationen �ber seine L�nge untergebracht. Der daf�r reservierte Platz betr�gt n Bytes. Das Argument mu� zwischen 0 und 4 liegen. Voreinstellung: #lengthbytes 0
�blicherweise befinden sich alle Kommandos im Kopf der Katalogbeschreibung. Darauf folgen abwechselnd jeweils Beschreibungszeilen und Text. Eine Beschreibung entspricht folgendem Schema:
<ID-Bezeichner> (<ID>/<Minimum>/<Maximum>)

ID-Bezeichner ist ein Symbol f�r den darauffolgenden Text, mit dem sp�ter der Text referenziert wird. ID ist eine im Katalog eindeutige Nummer f�r diesen Text. Minimum und Maximum bezeichnen die minimale und maximale L�nge der Zeichenkette (wichtig f�r Katalog�bersetzungen). Die letzten drei Parameter k�nnen auch weggelassen werden, wodurch automatisch eine ID vergeben wird und Minumin und Maximum beliebig sind (wichtig: nur die Parameter weglassen, nicht den Rest �(//)�)

Direkt auf die Beschreibung mu� der eigentliche Text f�r diese ID folgen. �bersteigt dessen L�nge eine Zeile, kann man sich mit einem Backslash �\� am Zeilenende weiterhelfen. Weiterhin existieren die gleichen Steuerzeichen wie in C++ (z.B.
�\n�f�r einen Zeilenvorschub). Zus�tzlich existieren:
\cCSI (ASCII 155) markiert Start einer Sequenz von Steuerzeichen in einem CON:-Fenster
\gDisplay Beep (ASCII 7)
bs25\) Klammer zu (falls n�tig)
\\Backslash �\� selbst
\xHHdas ASCII-Zeichen mitdem Hex-Code HH
\OOO das ASCII-Zeichen mit dem
Oktal-Code OOO
Eine typisches Paar von Beschreibungszeile und Text w�re:

MSG_Welcome (//)
Willkommen zu WorderWord Plus 4.56a SE

Katalog�bersetzungen sind ganz analog aufgebaut. Es existieren lediglich andere Kommandos; die Angabe von ID, Minimum und Maximum ist nicht gestattet. Hier die m�glichen Kommandos:
##version <AmigaDOS-Versionsstring>
Gibt die Version des Katalogs an. Beispielsweise

##version $VER:worderword.catalog 4.5 (11.11.97)

verpa�t dem Katalog eine Versionsnummer 4.
##language <Katalogsprache>
Spezifiziert die Sprache des Kataloges, die selbstverst�ndlich eine andere als in der Katalogbeschreibung sein sollte. Katalogsprache und -version m�ssen angegeben werden.
##codeset <Codierungsnummer>
Noch unbenutzt, immer 0 eintragen oder nicht benutzen.
##chunk <IFF-ID> <Text>
Kataloge sind IFF-Dateien. Dieser Befehl f�gt einen IFF-Chunk mit der angegebenen ID und dem Text als Inhalt dem Katalog hinzu. Beispielsweise kann eine AUTH-Chunk Informationen �ber den Autor einer IFF-Datei speichern:

##chunk AUTH German catalog by Hans M�ller

Dieser Befehl ist allerdings eine Erweiterung von FlexCat.  

MagnaMedia Hauptseite

� Copyright by MagnaMedia Verlag AG, Haar bei M�nchen
Ver�ffentlichung und Vervielf�ltigung nur mit schriftlicher Genehmigung des Verlags


Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster AMIGA schicken.
Zuletzt aktualisiert am 18. Oktober 1997.